package com.tedu.API.threadAPI;

import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.sql.Array;
import java.util.*;
import java.util.function.Consumer;

/**
 * Lambda表达式 ---> ()->{} 【接口/抽象 --匿名内部类】
 *
 * Collection --->List: 存重复的元素并且有序
 *                Set:存无序并且不重复【保持数据结构一致】
 *                Queue:队列结合业务
 *Map------->HashMap:键值对存储
 */
public class LambdaDemo {
    @Test
    public void testList(){
        List<String> list=new ArrayList<>();
        list.add("人机");
        list.add("哈哈哈");
        list.add("酷酷酷");
        //普通for 增强for forEach方法
        for(String s:list){
            System.out.println("增强for"+s);
        }
        //支持forEach方法：遍历集合 Consumer针对List集合接口
        //accept()获取list集合所有元素
        list.forEach(new Consumer<String>(){
            public void accept(String str) {
                System.out.println("consumer:"+str);
            }
        });
        //支持forEach方法：遍历集合【consumer 匿名内部类】
        //编写Lambda表达式
        list.forEach(str -> System.out.println("Lambda"+str));
    }

    @Test
    public void testMap(){
        //创建Map集合：键值对
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"唐山");
        map.put(2,"石家庄");
        map.put(3,"邯郸");
        map.put(4,"武城");
        //遍历集合：普通for，增强for，forEach(BiConsumer接口)
        //键值对--->一组Entry对象
        //BiConsumer接口---->获取Entry对象----accept()
        map.forEach((Int,Str)->{
            System.out.println("键"+Int+"值"+Str);
        });


    }

    /**
     * 作业：Lambda完成Thread线程创建
     *      使用Lambda完成Runnable线程创建
     *      IO流---File类：listFile(FileFilter接口)【5行】
     *         目标使用【io包下FilterAPI】实现Lambda
     *      4.   IO流---File类：listFile(FileFilter接口)【2行】
     *             目标使用【io包下FilterAPI】实现Lambda
     *      5.集合：
     *        目标：【list包下ListAPI类下单元测试testComparator()】
     *        lambdaDemo类下完成作业
     * @LambdaHomeWork1
     */
    @Test
    public void LambdaHomeWork1(){
        Thread th=new Thread(()->{
            for (int i=0;i<10;i++){
                System.out.println("`1");
            }
        });
        th.start();
    }
    @Test
    public void LambdaHomeWork2(){
        Runnable r=()->{
          for (int i=0;i<10;i++){
              System.out.println("2");
          }
        };
        Thread th=new Thread(r);
        th.start();
    }
    @Test
    public void LambdaHomeWork3(){
        File file=new File("."+File.separator );
        file.listFiles(pathName->{
            String name=file.getName();
            return name.startsWith("s");
        });
    }
    @Test
    public void LambdaHomeWork4() {
        for (File s:new File("." + File.separator).listFiles( name -> name.getName().startsWith("s"))) {
            System.out.println("遍历后过滤完成："+s );
        }
    }
    @Test
    public void LambdaHomeWork5(){
        List<String> list=new ArrayList<>();
        list.add("孟涛");
        list.add("小骚秒");
        list.add("大傻勾");
        list.add("小略克子");
        Comparator<String> c=(o1,o2)-> -(o1.length()-o2.length());
    }
}
